<?

function executa_webservice() {
    $login = verify_login();
    $dados = request();
    if ($login) {
        if ($login['Error'] || $login['Warning']) {
            return $login;
        } else {
            $funcao = $dados['function'];
            if (!$funcao) {
                $funcao = 'get_webservice_functions';
                $dados['id_lang'] = get_user_language_id();
                return retorna_resultado_query($funcao, $dados);
            } else {
                return executa_webservice_function($funcao);
            }
        }
    } else {
        if ($dados['active_account']) {
            $erro = active_account();
        } elseif ($dados['forgot_password']) {
            $erro = forgot_password();
        } elseif ($dados['session']) {
            $erro['Error'] = get_error('session_invalid');
        } elseif ($dados['email'] && $dados['password']) {
            $erro['Error'] = get_error('invalid_data');
        } else {
            $erro['Error'] = get_error('not_login');
        }
        return $erro;
    }
}

function executa_webservice_function($funcao) {
    if (verify_function_permition($funcao)) {
        if (function_exists($funcao)) {
            return $funcao();
        } else {
            return executa_webservice_common();
        }
    } else {
        $erro['Error'] = get_error('not_permission');
        return $erro;
    }
}

function get_default_lang() {
    $default_lang = retorna_resultado_query('get_lang_id', get_config('default_lang'));
    return $default_lang['Data'][1]['id'];
}

function get_user_language_id() {
    $lang = get('id_lang');
    if ($lang) {
        set_session('id_lang', $lang);
    } else {
        $user_lang = retorna_resultado_query('get_user_language_id', get_session('email'));
        if ($user_lang['Data'][1]['id_lang']) {
            set_session('id_lang', $user_lang['Data'][1]['id_lang']);
        } else {
            set_session('id_lang', get_default_lang());
        }
    }
    return get_session('id_lang');
}

function get_error($erro) {
    $dados['erro'] = $erro;
    $dados['lang_id'] = get_user_language_id();
    $erro = retorna_resultado_query('get_error', $dados);
    return $erro['Data'][1]['translate'];
}

function get_table_from_function($function) {
    return substr($function, 4);
}

function get_type_from_function($function) {
    return substr($function, 0, 3);
}

function translations_exists($table_name) {
    $translate = retorna_resultado_query('get_translations_exists', $table_name);
    if ($translate['Data']) {
        foreach ($translate['Data'][1] as $key => $tra) {
            $table = $tra;
        }
    }
    return $table;
}

function executa_webservice_common() {
    $dados = request();
    $dados['table'] = get_table_from_function($dados['function']);
    $dados['type'] = get_type_from_function($dados['function']);
    if (translations_exists($dados['table'])) {
        $dados['lang_id'] = get_user_language_id();
    }
    return retorna_resultado_query('funcao_common', $dados);
}

?>